package lv.clientedisqueria.view.tipoSoporte;

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;

import lv.clientedisqueria.controller.Controller;
import lv.clientedisqueria.model.tipoSoporte.TipoSoporteModel;
import lv.clientedisqueria.view.AbstractPanel;
import lv.mensajeriadisqueria.idomain.ITipoSoporte;


/**
 * Este es el panel de administracion de instrumentos
 */
@SuppressWarnings("serial")
public class TipoSoportePanel extends AbstractPanel<ITipoSoporte> {

	private final Controller<ITipoSoporte> controller;

	private JLabel descripcionLbl;
	private JTextField descripcionTF;
	private JPanel textFieldsPanel;
	private JScrollPane scrollPane;
	private JTable tipoSoporteTabla;

	public TipoSoportePanel(final TipoSoporteModel tipoSoporteModel) {
		super(tipoSoporteModel);
		controller = new Controller<ITipoSoporte>(tipoSoporteModel);
		controller.addObserver(this);
		iniciarView();
	}

	private void iniciarView() {
		setLayout(new BorderLayout());
		add(new TipoSoporteMenuBoton(controller), BorderLayout.NORTH);
		
		JPanel panel = new JPanel(new BorderLayout());
		panel.add(getTextFieldsPanel(), BorderLayout.NORTH);
		
		panel.add(getScrollPane(), BorderLayout.CENTER);
		add(panel, BorderLayout.CENTER);
	}

	public Controller<ITipoSoporte> getEstiloController() {
		return controller;
	}

	public JScrollPane getScrollPane() {
		if(scrollPane == null) {
			scrollPane = new JScrollPane(getTipoSoporteTabla());
			scrollPane.setAutoscrolls(true);
		}
		return scrollPane;
	}
	
	public JTable getTipoSoporteTabla() {
		if (tipoSoporteTabla == null) {
			tipoSoporteTabla = new JTable(controller.getModelo().getTablaModel());
			tipoSoporteTabla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			tipoSoporteTabla.setSelectionModel(controller.getModelo().getTablaModel().getListSelectionModel());
		}
		return tipoSoporteTabla;
	}
	


	public JLabel getDescripcionLbl() {
		if(descripcionLbl == null){
			descripcionLbl = new JLabel("Descripcion");
		}
		return descripcionLbl;
	}

	public JTextField getDescripcionTF() {
		if(descripcionTF == null){
			descripcionTF = new JTextField();
			descripcionTF.setEnabled(false);
		}
		return descripcionTF;
	}


	public JPanel getTextFieldsPanel() {
		if(textFieldsPanel == null){
			textFieldsPanel = new JPanel(new GridLayout(1, 2));
			textFieldsPanel.add(getDescripcionLbl());
			textFieldsPanel.add(getDescripcionTF());
			textFieldsPanel.validate();
			
			ITipoSoporte soporte = (ITipoSoporte)controller.getModelo()
			.getTablaModel().getSeleccionado();

			if(soporte!= null){
				actualizarCampos(soporte);
			}
		}
		return textFieldsPanel;
	}
	
	protected ITipoSoporte actualizarDomain(ITipoSoporte tipoSoporte) {
		tipoSoporte.setDescripcion(getDescripcionTF().getText());
		return tipoSoporte;
	}

	protected void iniciarCampos() {
		descripcionTF.setText("");
	}

	/**
	 * Habilita y dehabilita los text field dependiendo del parametro
	 * @param habilitar
	 */
	protected void habilitarTextField(boolean habilitar) {
		descripcionTF.setEnabled(habilitar);
	}

	@Override
	protected void actualizarTabla() {
		tipoSoporteTabla.updateUI();
	}

	@Override
	protected Controller<ITipoSoporte> getController() {
		return this.controller;
	}

	@Override
	protected void actualizarCampos(ITipoSoporte tipoSoporte) {
		getDescripcionTF().setText(tipoSoporte.getDescripcion());
		TipoSoportePanel.this.repaint();
	}
}